package com.lgh.ibs.utils;

import java.io.UnsupportedEncodingException;

import org.apache.commons.codec.binary.Base64;

/**
 * @ClassName: IntfParamEncryptUtil 
 * @Description: base64加密解密类，适用于一般场景，重要的信息请不要使用该类
 * @date 2016年9月13日 上午9:46:25 
 * @author guohao.li
 */
public class Base64EncryptUtil {
	
	/**位运算code*/
	private final static Long encryptCode = 1010l;
	
	/**
	 * @Title: encrypt 
	 * @Description: 自定义加密 
	 * @param 加密 字符 串
	 * @return
	 * @throws UnsupportedEncodingException 
	 * @throws 
	 * @author guohao.li
	 * @dateTime 2016年9月13日 上午9:31:58
	 */
	public static String customEncrypt(String str) throws UnsupportedEncodingException{
		char[] array = str.toCharArray();
		for (int i = 0; i < array.length; i++) {// 遍历字符数组
            array[i] = (char) (array[i] ^ encryptCode);// 对每个数组元素进行异或运算
        }
		byte[] encodeBase64 = Base64.encodeBase64(new String(array).getBytes("UTF-8"));
		return new String(encodeBase64);
	}
	
	
	/**
	 * 
	 * @Title: decipher 
	 * @Description: 自定义解密
	 * @param str 解密字符串
	 * @return
	 * @throws UnsupportedEncodingException
	 * @throws 
	 * @author guohao.li
	 * @dateTime 2016年9月13日 上午9:46:54
	 */
	public static String customDecipher(String str) throws UnsupportedEncodingException{
		byte[] decodeBase64 = Base64.decodeBase64(str.getBytes("UTF-8"));
		String str64 = new String(decodeBase64, "UTF-8");
		
		char[] array = str64.toCharArray();
		for (int i = 0; i < array.length; i++) {// 遍历字符数组
			array[i] = (char) (array[i] ^ encryptCode);// 对每个数组元素进行异或运算
		}
		return new String(array);
	}
	
	/**
	 * @Title: Base64Encrypt 
	 * @Description:base64加密，字符串采用UTF-8编码 
	 * @param str
	 * @return
	 * @throws UnsupportedEncodingException
	 * @throws 
	 * @author guohao.li
	 * @dateTime 2016年9月13日 上午9:55:32
	 */
	public static String Base64Encrypt(String str) throws UnsupportedEncodingException{
		byte[] encodeBase64 = Base64.encodeBase64(str.getBytes("UTF-8"));
		return new String(encodeBase64);
	}
	
	/**
	 * @Title: base64Decipher 
	 * @Description: Base64解密，字符串采用UTF-8编码
	 * @param str
	 * @return
	 * @throws UnsupportedEncodingException
	 * @throws 
	 * @author guohao.li
	 * @dateTime 2016年9月13日 上午9:54:18
	 */
	public static String base64Decipher(String str) throws UnsupportedEncodingException{
		byte[] decodeBase64 = Base64.decodeBase64(str.getBytes("UTF-8"));
		String str64 = new String(decodeBase64);
		
		return str64;
	}
	
	  public static void main(String[] args) throws UnsupportedEncodingException {
		  String str = "qwe!1234567";
		  System.out.println("原串：" + str);
		  
		  //base64加密
		  String base64Encrypt = Base64Encrypt(str);
		  System.out.println("base64加密：" + base64Encrypt);
		  
		  //base64解密
		  String base64Decipher = base64Decipher(base64Encrypt);
		  System.out.println("base64解密：" + base64Decipher);
		  
		  //自定义加密 
		  String encrypt = customEncrypt(str);
		  System.out.println("加密：" + encrypt);
	
		  //自定义解密
		  String decipher = customDecipher(encrypt);
		  System.out.println("解密：" + decipher);
		  
	  }
}
